1. Salesman Table
CREATE TABLE salesman (
salesman_id INT PRIMARY KEY,
name VARCHAR(255),
city VARCHAR(255),
commission FLOAT
);
INSERT INTO salesman VALUES
(5001, 'James Hoog', 'New York', 0.15),
(5002, 'Nail Knite', 'Paris', 0.13),
(5005, 'Pit Alex', 'London', 0.11),
(5006, 'Mc Lyon', 'Paris', 0.14),
(5003, 'Lauson Hen', NULL, 0.12),
(5007, 'Paul Adam', 'Rome', 0.13);
Sample Data:
| salesman_id | name | city | commission |
|---|---|---|---|
| 5001 | James Hoog | New York | 0.15 |
| 5002 | Nail Knite | Paris | 0.13 |
| 5005 | Pit Alex | London | 0.11 |
| 5006 | Mc Lyon | Paris | 0.14 |
| 5003 | Lauson Hen | NULL | 0.12 |
| 5007 | Paul Adam | Rome | 0.13 |
2. Customer Table
CREATE TABLE customer (
customer_id INT PRIMARY KEY,
customer_name VARCHAR(255),
city VARCHAR(255),
grade INT,
salesman_id INT
);
INSERT INTO customer VALUES
(3002, 'Nick Rimando', 'New York', 100, 5001),
(3005, 'Graham Zusi', 'California', 200, 5002),
(3001, 'Brad Guzan', 'London', NULL, 5005),
(3004, 'Fabian Johns', 'Paris', 300, 5006),
(3007, 'Brad Davis', 'New York', 200, 5001),
(3009, 'Geoff Camero', 'Berlin', 100, 5003),
(3008, 'Julian Green', 'London', 300, 5002),
(3003, 'Jozy Altidor', 'Moscow', 200, 5007);
Sample Data:
| customer_id | customer_name | city | grade | salesman_id |
|---|---|---|---|---|
| 3002 | Nick Rimando | New York | 100 | 5001 |
| 3005 | Graham Zusi | California | 200 | 5002 |
| 3001 | Brad Guzan | London | NULL | 5005 |
| 3004 | Fabian Johns | Paris | 300 | 5006 |
| 3007 | Brad Davis | New York | 200 | 5001 |
| 3009 | Geoff Camero | Berlin | 100 | 5003 |
| 3008 | Julian Green | London | 300 | 5002 |
| 3003 | Jozy Altidor | Moscow | 200 | 5007 |
3. Orders Table
CREATE TABLE orders (
order_no INT PRIMARY KEY,
purchase_amount FLOAT,
order_date DATE,
customer_id INT,
salesman_id INT
);
INSERT INTO orders VALUES
(70001, 150.5, '2012-10-05', 3005, 5002),
(70009, 270.65, '2012-09-10', 3001, 5005),
(70002, 65.26, '2012-10-05', 3002, 5001),
(70004, 110.5, '2012-08-17', 3009, 5003),
(70007, 948.5, '2012-09-10', 3005, 5002),
(70005, 2400.6, '2012-07-27', 3007, 5001),
(70008, 5760, '2012-09-10', 3002, 5001),
(70010, 1983.43, '2012-10-10', 3004, 5006),
(70003, 2480.4, '2012-10-10', 3009, 5003),
(70012, 250.45, '2012-06-27', 3008, 5002),
(70011, 75.29, '2012-08-17', 3003, 5007),
(70013, 3045.6, '2012-04-25', 3002, 5001);
Sample Data:
| order_no | purchase_amount | order_date | customer_id | salesman_id |
|---|---|---|---|---|
| 70001 | 150.5 | 2012-10-05 | 3005 | 5002 |
| 70009 | 270.65 | 2012-09-10 | 3001 | 5005 |
| 70002 | 65.26 | 2012-10-05 | 3002 | 5001 |
| 70004 | 110.5 | 2012-08-17 | 3009 | 5003 |
| 70007 | 948.5 | 2012-09-10 | 3005 | 5002 |
| 70005 | 2400.6 | 2012-07-27 | 3007 | 5001 |
| 70008 | 5760 | 2012-09-10 | 3002 | 5001 |
| 70010 | 1983.43 | 2012-10-10 | 3004 | 5006 |
| 70003 | 2480.4 | 2012-10-10 | 3009 | 5003 |
| 70012 | 250.45 | 2012-06-27 | 3008 | 5002 |
| 70011 | 75.29 | 2012-08-17 | 3003 | 5007 |
| 70013 | 3045.6 | 2012-04-25 | 3002 | 5001 |
4. Company Table
CREATE TABLE company (
COMPANY_ID INT PRIMARY KEY,
COMPANY_NAME VARCHAR(255)
);
INSERT INTO company VALUES
(11, 'Samsung'),
(12, 'iBall'),
(13, 'Epsion'),
(14, 'Zebronics'),
(15, 'Asus'),
(16, 'Frontech');
Sample Data:
| COMPANY_ID | COMPANY_NAME |
|---|---|
| 11 | Samsung |
| 12 | iBall |
| 13 | Epsion |
| 14 | Zebronics |
| 15 | Asus |
| 16 | Frontech |
5. Product Table
CREATE TABLE product (
PRODUCT_ID INT PRIMARY KEY,
PRODUCT_NAME VARCHAR(255),
PRODUCT_PRICE INT,
PRODUCT_COMPANY INT
);
INSERT INTO product VALUES
(101, 'Mother Board', 3200, 15),
(102, 'Keyboard', 450, 16),
(103, 'ZIP drive', 250, 14),
(104, 'Speaker', 550, 16),
(105, 'Monitor', 5000, 11),
(106, 'DVD drive', 900, 12),
(107, 'CD drive', 800, 12),
(108, 'Printer', 2600, 13),
(109, 'Refill cartridge', 350, 13),
(110, 'Mouse', 250, 12);
Sample Data:
| PRODUCT_ID | PRODUCT_NAME | PRODUCT_PRICE | PRODUCT_COMPANY |
|---|---|---|---|
| 101 | Mother Board | 3200 | 15 |
| 102 | Keyboard | 450 | 16 |
| 103 | ZIP drive | 250 | 14 |
| 104 | Speaker | 550 | 16 |
| 105 | Monitor | 5000 | 11 |
| 106 | DVD drive | 900 | 12 |
| 107 | CD drive | 800 | 12 |
| 108 | Printer | 2600 | 13 |
| 109 | Refill cartridge | 350 | 13 |
| 110 | Mouse | 250 | 12 |
6. Department Table
CREATE TABLE department (
DEPT_CODE INT PRIMARY KEY,
DEPT_NAME VARCHAR(255),
DEPT_BUDGET INT
);
INSERT INTO department VALUES
(57, 'IT', 65000),
(63, 'Finance', 15000),
(47, 'HR', 2250000),
(27, 89, 'RD', 55),
(000),
(70000, 'QC');
Sample Data:
| DEPT_CODE | DEPT_NAME | DEPT_BUDGET |
|---|---|---|
| 57 | IT | 65000 |
| 63 | Finance | 15000 |
| 47 | HR | 240000 |
| 27 | RD | 55000 |
| 89 | QC | 75000 |
7. Employee Table
CREATE TABLE employee (
EMPLOYEE_ID INT PRIMARY KEY,
EMPLOYEE_FNAME VARCHAR(255),
EMPLOYEE_LNAME VARCHAR(255),
EMPLOYEE_DEPT INT
);
INSERT INTO employee VALUES
(127323, 'Michale', 'Robbin', 57),
(526689, 'Carlos', 'Snares', 63),
(843795, 'Enric', 'Dosio', 57),
(328717, 'John', 'Snares', 63),
(444527, 'Joseph', 'Dosni', 47),
(659831, 'Zanifer', 'Emily', 47),
(847674, 'Kuleswar', 'Sitaraman', 57),
(748681, 'Henrey', 'Gabriel', 47),
(555935, 'Alex', 'Manuel', 57),
(539569, 'George', 'Mardy', 27),
(733843, 'Mario', 'Saule', 63),
(631548, 'Alan', 'Snappy', 27),
(839139, 'Maria', 'Foster', 57);
Sample Data:
| EMPLOYEE_ID | EMPLOYEE_FNAME | EMPLOYEE_LNAME | EMPLOYEE_DEPT |
|---|---|---|---|
| 127323 | Michale | Robbin | 57 |
| 526689 | Carlos | Snares | 63 |
| 843795 | Enric | Dosio | 57 |
| 328717 | John | Snares | 63 |
| 444527 | Joseph | Dosni | 47 |
| 659831 | Zanifer | Emily | 47 |
| 847674 | Kuleswar | Sitaraman | 57 |
| 748681 | Henrey | Gabriel | 47 |
| 555935 | Alex | Manuel | 57 |
| 539569 | George | Mardy | 27 |
| 733843 | Mario | Saule | 63 |
| 631548 | Alan | Snappy | 27 |
| 839139 | Maria | Foster | 57 |
INNER JOIN Queries
1. Salesmen and Customers in Same City
Write a SQL query to prepare a list with salesman name, customer name, and their cities for salesmen and customers who belong to the same city.
Query:
SELECT s.name AS "Salesman", c.customer_name AS "Customer Name", c.city AS "City"
FROM salesman s INNER JOIN customer c ON s.city = c.city;
Expected Result:
| Salesman | Customer Name | City |
|---|---|---|
| James Hoog | Nick Rimando | New York |
| James Hoog | Brad Davis | New York |
| Nail Knite | Fabian Johns | Paris |
| Pit Alex | Brad Guzan | London |
| Pit Alex | Julian Green | London |
2. Orders Between 500 and 2000
Write a SQL query to make a list with order number, purchase amount, customer name, and city for orders with an amount between 500 and 2000.
Query:
SELECT o.order_no AS "Order No", o.purchase_amount AS "Purchase Amount",
c.customer_name AS "Customer Name", c.city AS "City"
FROM orders o INNER JOIN customer c ON o.customer_id = c.customer_id
WHERE o.purchase_amount BETWEEN 500 AND 2000;
Expected Result:
| Order No | Purchase Amount | Customer Name | City |
|---|---|---|---|
| 70007 | 948.50 | Graham Zusi | California |
| 70010 | 1983.43 | Fabian Johns | Paris |
3. Salesman-Customer Relationships
Write a SQL query to identify which salesman is working for which customer.
Query:
SELECT c.customer_name AS "Customer Name", s.name AS "Salesman"
FROM customer c INNER JOIN salesman s ON c.salesman_id = s.salesman_id;
Expected Result:
| Customer Name | Salesman |
|---|---|
| Nick Rimando | James Hoog |
| Graham Zusi | Nail Knite |
| Brad Guzan | Pit Alex |
| Fabian Johns | Mc Lyon |
| Brad Davis | James Hoog |
| Geoff Camero | Lauson Hen |
| Julian Green | Nail Knite |
| Jozy Altidor | Paul Adam |
4. Customers with Salesmen Having > 12% Commission
Write a SQL query to find customers who appointed a salesman with a commission greater than 12%.
Query:
SELECT c.customer_name AS "Customer Name", c.city AS "City",
s.name AS "Salesman", s.commission AS "Commission"
FROM customer c INNER JOIN salesman s ON c.salesman_id = s.salesman_id
WHERE s.commission > 0.12;
Expected Result:
| Customer Name | City | Salesman | Commission |
|---|---|---|---|
| Nick Rimando | New York | James Hoog | 0.15 |
| Graham Zusi | California | Nail Knite | 0.13 |
| Fabian Johns | Paris | Mc Lyon | 0.14 |
| Brad Davis | New York | James Hoog | 0.15 |
| Julian Green | London | Nail Knite | 0.13 |
| Jozy Altidor | Moscow | Paul Adam | 0.13 |
5. Different Cities and > 12% Commission
Write a SQL query to find customers who appointed a salesman who does not live in the same city and has a commission above 12%.
Query:
SELECT c.customer_name AS "Customer Name", c.city AS "Customer City",
s.name AS "Salesman", s.city AS "Salesman City", s.commission AS "Commission"
FROM customer c INNER JOIN salesman s ON c.salesman_id = s.salesman_id
WHERE s.commission > 0.12 AND c.city != s.city;
Expected Result:
| Customer Name | Customer City | Salesman | Salesman City | Commission |
|---|---|---|---|---|
| Graham Zusi | California | Nail Knite | Paris | 0.13 |
| Julian Green | London | Nail Knite | Paris | 0.13 |
| Jozy Altidor | Moscow | Paul Adam | Rome | 0.13 |
6. Complete Order Details
Write a SQL query to find details of an order, including order number, order date, amount, customer name, salesman name, and commission.
Query:
SELECT o.order_no AS "Order No", o.order_date AS "Order Date",
o.purchase_amount AS "Purchase Amount", c.customer_name AS "Customer Name",
s.name AS "Salesman", s.commission AS "Commission"
FROM orders o
INNER JOIN customer c ON o.customer_id = c.customer_id
INNER JOIN salesman s ON o.salesman_id = s.salesman_id;
Expected Result:
| Order No | Order Date | Purchase Amount | Customer Name | Salesman | Commission |
|---|---|---|---|---|---|
| 70001 | 2012-10-05 | 150.50 | Graham Zusi | Nail Knite | 0.13 |
| 70009 | 2012-09-10 | 270.65 | Brad Guzan | Pit Alex | 0.11 |
| 70002 | 2012-10-05 | 65.26 | Nick Rimando | James Hoog | 0.15 |
| 70004 | 2012-08-17 | 110.50 | Geoff Camero | Lauson Hen | 0.12 |
| 70007 | 2012-09-10 | 948.50 | Graham Zusi | Nail Knite | 0.13 |
| 70005 | 2012-07-27 | 2400.60 | Brad Davis | James Hoog | 0.15 |
| 70008 | 2012-09-10 | 5760.00 | Nick Rimando | James Hoog | 0.15 |
| 70010 | 2012-10-10 | 1983.43 | Fabian Johns | Mc Lyon | 0.14 |
| 70003 | 2012-10-10 | 2480.40 | Geoff Camero | Lauson Hen | 0.12 |
| 70012 | 2012-06-27 | 250.45 | Julian Green | Nail Knite | 0.13 |
| 70011 | 2012-08-17 | 75.29 | Jozy Altidor | Paul Adam | 0.13 |
| 70013 | 2012-04-25 | 3045.60 | Nick Rimando | James Hoog | 0.15 |
LEFT JOIN Queries
7. All Customers (Ascending Order)
Write a SQL query to list customers in ascending order who work either through a salesman or on their own.
Query:
SELECT c.customer_name AS "Customer Name"
FROM customer c LEFT JOIN salesman s ON c.salesman_id = s.salesman_id
ORDER BY c.customer_id ASC;
Expected Result:
| Customer Name |
|---|
| Brad Guzan |
| Nick Rimando |
| Jozy Altidor |
| Fabian Johns |
| Graham Zusi |
| Brad Davis |
| Julian Green |
| Geoff Camero |
8. Customers with Grade < 300
Write a SQL query to list customers in ascending order who hold a grade less than 300 and work either through a salesman or on their own.
Query:
SELECT c.customer_name AS "Customer Name", c.grade AS "Grade"
FROM customer c LEFT JOIN salesman s ON c.salesman_id = s.salesman_id
WHERE c.grade < 300
ORDER BY c.customer_id ASC;
Expected Result:
| Customer Name | Grade |
|---|---|
| Nick Rimando | 100 |
| Jozy Altidor | 200 |
| Graham Zusi | 200 |
| Brad Davis | 200 |
| Geoff Camero | 100 |
9. Customer Orders Report
Write a SQL query to make a report with customer name, city, order number, order date, and order amount, in ascending order by order date, to show whether customers have placed orders.
Query:
SELECT c.customer_name AS "Customer Name", c.city AS "City",
o.order_no AS "Order No", o.order_date AS "Order Date",
o.purchase_amount AS "Purchase Amount"
FROM customer c
LEFT OUTER JOIN orders o ON c.customer_id = o.customer_id
ORDER BY o.order_date ASC;
Expected Result:
| Customer Name | City | Order No | Order Date | Purchase Amount |
|---|---|---|---|---|
| Nick Rimando | New York | 70013 | 2012-04-25 | 3045.60 |
| Julian Green | London | 70012 | 2012-06-27 | 250.45 |
| Brad Davis | New York | 70005 | 2012-07-27 | 2400.60 |
| Geoff Camero | Berlin | 70004 | 2012-08-17 | 110.50 |
| Jozy Altidor | Moscow | 70011 | 2012-08-17 | 75.29 |
| Brad Guzan | London | 70009 | 2012-09-10 | 270.65 |
| Graham Zusi | California | 70007 | 2012-09-10 | 948.50 |
| Nick Rimando | New York | 70008 | 2012-09-10 | 5760.00 |
| Graham Zusi | California | 70001 | 2012-10-05 | 150.50 |
| Nick Rimando | New York | 70002 | 2012-10-05 | 65.26 |
| Fabian Johns | Paris | 70010 | 2012-10-10 | 1983.43 |
| Geoff Camero | Berlin | 70003 | 2012-10-10 | 2480.40 |
10. Complete Customer-Order-Salesman Report
Write a SQL query to make a report with customer name, city, order number, order date, order amount, salesman name, and commission, to show whether customers have placed orders through their salesman or on their own.
Query:
SELECT c.customer_name AS "Customer Name", c.city AS "City",
o.order_no AS "Order No", o.order_date AS "Order Date",
o.purchase_amount AS "Purchase Amount",
s.name AS "Salesman", s.commission AS "Commission"
FROM customer c
LEFT JOIN orders o ON c.customer_id = o.customer_id
LEFT JOIN salesman s ON c.salesman_id = s.salesman_id;
Expected Result:
| Customer Name | City | Order No | Order Date | Purchase Amount | Salesman | Commission |
|---|---|---|---|---|---|---|
| Nick Rimando | New York | 70002 | 2012-10-05 | 65.26 | James Hoog | 0.15 |
| Nick Rimando | New York | 70008 | 2012-09-10 | 5760.00 | James Hoog | 0.15 |
| Nick Rimando | New York | 70013 | 2012-04-25 | 3045.60 | James Hoog | 0.15 |
| Graham Zusi | California | 70001 | 2012-10-05 | 150.50 | Nail Knite | 0.13 |
| Graham Zusi | California | 70007 | 2012-09-10 | 948.50 | Nail Knite | 0.13 |
| Brad Guzan | London | 70009 | 2012-09-10 | 270.65 | Pit Alex | 0.11 |
| Fabian Johns | Paris | 70010 | 2012-10-10 | 1983.43 | Mc Lyon | 0.14 |
| Brad Davis | New York | 70005 | 2012-07-27 | 2400.60 | James Hoog | 0.15 |
| Geoff Camero | Berlin | 70004 | 2012-08-17 | 110.50 | Lauson Hen | 0.12 |
| Geoff Camero | Berlin | 70003 | 2012-10-10 | 2480.40 | Lauson Hen | 0.12 |
| Julian Green | London | 70012 | 2012-06-27 | 250.45 | Nail Knite | 0.13 |
| Jozy Altidor | Moscow | 70011 | 2012-08-17 | 75.29 | Paul Adam | 0.13 |
11. All Salesmen (Ascending Order)
Write a SQL query to list salesmen in ascending order, whether they work for one or more customers or none.
Query:
SELECT s.name AS "Salesman"
FROM salesman s LEFT JOIN customer c ON s.salesman_id = c.salesman_id
ORDER BY s.salesman_id ASC;
Expected Result:
| Salesman |
|---|
| James Hoog |
| James Hoog |
| Neil Knite |
| Neil Knite |
| Lauson Hen |
| Pit Alex |
| Mc Lyon |
| Paul Adam |
CROSS JOIN Queries
12. Cartesian Product: All Salesmen-Customer Combinations
Write a SQL query to create a Cartesian product between salesman and customer, where each salesman appears for all customers and vice versa.
Query:
SELECT s.name AS "Salesman", c.customer_name AS "Customer"
FROM salesmen s CROSS JOIN customer c;
Expected Result:
Creates a48 rows (6 salesmen × 8 customers). Example (partial):
| Salesman | Customer |
|---|---|
| James Hoog | Nick Rimando |
| James Hoog | Graham Zusi |
| ... | ... |
13. Cartesian Product: Salesmen with Cities
Write a SQL query to create a Cartesian product between salesman and customer, where each salesman with a city appears for all customers.
Query:
SELECT s.name AS "Salesman", c.customer_name AS "Customer"
FROM salesman s CROSS JOIN customer c
WHERE s.city IS NOT NULL;
Expected Result:
Creates 40 rows (5 salesmen with cities × 8 customers). Example (partial):
| Salesman | Customer |
|---|---|
| James Hoog | Nick Rimando |
| James Hoog | Graham Zusi |
| ... | ... |
14. Cartesian Product: Salesmen with Cities and Customers with Grades
Write a SQL query to create a Cartesian product between salesman and customer, where salesmen belong to a city and customers have a grade.
Query:
SELECT s.name AS "Salesman", c.customer_name AS "Customer"
FROM salesman s CROSS JOIN customer c
WHERE s.city IS NOT NULL AND c.grade IS NOT NULL;
Expected Result:
Creates 35 rows (5 salesmen with cities × 7 customers with grades). Example (partial):
| Salesman | Customer |
|---|---|
| James Hoog | Nick Rimando |
| James Hoog | Graham Zusi |
| ... | ... |
15. Cartesian Product: Different Cities and Customer Grades
Write a SQL query to create a Cartesian product between salesman and customer, where salesmen belong to a different city than the customer and customers have a grade.
Query:
SELECT s.name AS "Salesman", c.customer_name AS "Customer"
FROM salesman s CROSS JOIN customer c
WHERE s.city IS NOT NULL AND s.city != c.city AND c.grade IS NOT NULL;
Expected Result:
Shows combinations where salesman and customer are from different cities. Example (partial):
| Salesman | Customer |
|---|---|
| James Hoog | Graham Zusi |
| Nail Knite | Nick Rimando |
| ... | ... |
Product-Company Queries
16. All Product Data with Company Info
Write a SQL query to display all data from the product table, including each product's producer company.
Query:
SELECT p.*, c.COMPANY_NAME
FROM product p INNER JOIN company c ON p.PRODUCT_COMPANY = c.COMPANY_ID;
Expected Result:
| PRODUCT_ID | PRODUCT_NAME | PRODUCT_PRICE | PRODUCT_COMPANY | COMPANY_NAME |
|---|---|---|---|---|
| 101 | Mother Board | 3200 | 15 | Asus |
| 102 | Keyboard | 450 | 16 | Frontech |
| 103 | ZIP drive | 250 | 14 | Zebronics |
| 104 | Speaker | 550 | 16 | Frontech |
| 105 | Monitor | 5000 | 11 | Samsung |
| 106 | DVD drive | 900 | 12 | iBall |
| 107 | CD drive | 800 | 12 | iBall |
| 108 | Printer | 2600 | 13 | Epsion |
| 109 | Refill cartridge | 350 | 13 | Epsion |
| 110 | Mouse | 250 | 12 | iBall |
17. Product Names, Prices, and Company Names
Write a SQL query to display the name, price, and company name of all products.
Query:
SELECT p.PRODUCT_NAME AS "Product Name", p.PRODUCT_PRICE AS "Price",
c.COMPANY_NAME AS "Company Name"
FROM product p INNER JOIN company c ON p.PRODUCT_COMPANY = c.COMPANY_ID;
Expected Result:
| Product Name | Price | Company Name |
|---|---|---|
| Mother Board | 3200 | Asus |
| Keyboard | 450 | Frontech |
| ZIP drive | 250 | Zebronics |
| Speaker | 550 | Frontech |
| Monitor | 5000 | Samsung |
| DVD drive | 900 | iBall |
| CD drive | 800 | iBall |
| Printer | 2600 | Epsion |
| Refill cartridge | 350 | Epsion |
| Mouse | 250 | iBall |
18. Average Price by Company
Write a SQL query to display the average price of products for each company.
Query:
SELECT c.COMPANY_NAME AS "Company", AVG(p.PRODUCT_PRICE) AS "Avg Price"
FROM product p INNER JOIN company c ON p.PRODUCT_COMPANY = c.COMPANY_ID
GROUP BY c.COMPANY_NAME;
Expected Result:
| Company | Avg Price |
|---|---|
| Asus | 3200.00 |
| Frontech | 500.00 |
| Zebronics | 250.00 |
| Samsung | 5000.00 |
| iBall | 650.00 |
| Epsion | 1475.00 |
19. Companies with Average Price ≥ Rs. 350
Write a SQL query to display companies with an average product price greater than or equal to Rs. 350.
Query:
SELECT c.COMPANY_NAME AS "Company", AVG(p.PRODUCT_PRICE) AS "Avg Price"
FROM product p INNER JOIN company c ON p.PRODUCT_COMPANY = c.COMPANY_ID
GROUP BY c.COMPANY_NAME
HAVING AVG(p.PRODUCT_PRICE) >= 350;
Expected Result:
| Company | Avg Price |
|---|---|
| Asus | 3200.00 |
| Frontech | 500.00 |
| Samsung | 5000.00 |
| iBall | 650.00 |
| Epsion | 1475.00 |
20. Most Expensive Product by Company
Write a SQL query to display the most expensive product for each company.
Query:
SELECT c.COMPANY_NAME AS "Company", p.PRODUCT_ID AS "Product ID",
p.PRODUCT_NAME AS "Product Name", p.PRODUCT_PRICE AS "Price"
FROM product p INNER JOIN company c ON p.PRODUCT_COMPANY = c.COMPANY_ID
WHERE p.PRODUCT_PRICE = (
SELECT MAX(p2.PRODUCT_PRICE)
FROM product p2
WHERE p2.PRODUCT_COMPANY = c.COMPANY_ID
);
Expected Result:
| Company | Product ID | Product Name | Price |
|---|---|---|---|
| Asus | 101 | Mother Board | 3200 |
| Frontech | 104 | Speaker | 550 |
| Zebronics | 103 | ZIP drive | 250 |
| Samsung | 105 | Monitor | 5000 |
| iBall | 106 | DVD drive | 900 |
| Epsion | 108 | Printer | 2600 |
Employee-Department Queries
21. All Employee Data with Department
Write a SQL query to display all employee data along with their department details.
Query:
SELECT e.*, d.DEPT_NAME, d.DEPT_BUDGET
FROM employee e INNER JOIN department d ON e.EMPLOYEE_DEPT = d.DEPT_CODE;
Expected Result:
| EMPLOYEE_ID | EMPLOYEE_FNAME | EMPLOYEE_LNAME | EMPLOYEE_DEPT | DEPT_NAME | DEPT_BUDGET |
|---|---|---|---|---|---|
| 127323 | Michale Robbin | 57 | IT | 65000 | |
| 526689 | Carlos | Snares | 63 | Finance | 15000 |
| 843795 | Enric | Dosio | 57 | IT | 65000 |
| 328717 | John | Snares | 63 | Finance | 15000 |
| 444527 | Joseph | Dosni | 47 | HR | 240000 |
| 659831 | Zanifer | Emily | 47 | HR | 240000 |
| 847674 | Kuleswar | Sitaraman | 57 | IT | 65000 |
| 748681 | Henrey | Gabriel | 47 | HR | 240000 |
| 555935 | Alex | Manuel | 57 | IT | 65000 |
| 539569 | George | Mardy | 27 | RD | 55000 |
| 733843 | Mario | Saule | 63 | Finance | 15000 |
| 631548 | Alan | Snappy | 27 | RD | 55000 |
| 839139 | Maria | Foster | 57 | IT | 65000 |
22. Employee Names with Department Info
Write a SQL query to display employee first and last names along with their department name and budget.
Query:
SELECT e.EMPLOYEE_FNAME AS "First Name", e.EMPLOYEE_LNAME AS "Last Name",
d.DEPT_NAME AS "Department Name", d.DEPT_BUDGET AS "Amount Allotted"
FROM employee e INNER JOIN department d ON e.EMPLOYEE_DEPT = d.DEPT_CODE;
Expected Result:
| First Name | Last Name | Department Name | Amount Allotted |
|---|---|---|---|
| Michale | Robbin | IT | 65000 |
| Carlos | Snares | Finance | 15000 |
| Enric | Dosio | IT | 65000 |
| John | Snares | Finance | 15000 |
| Joseph | Dosni | HR | 240000 |
| Zanifer | Emily | HR | 240000 |
| Kuleswar | Sitaraman | IT | 65000 |
| Henrey | Gabriel | HR | 240000 |
| Alex | Manuel | IT | 65000 |
| George | Mardy | RD | 55000 |
| Mario | Saule | Finance | 15000 |
| Alan | Snappy | RD | 55000 |
| Maria | Foster | IT | 65000 |
23. Employees in Departments with Budget > Rs. 50000
Write a SQL query to display employees in departments with a budget greater than Rs. 50000.
Query:
SELECT e.EMPLOYEE_FNAME AS "First Name", e.EMPLOYEE_LNAME AS "Last Name"
FROM employee e INNER JOIN department d ON e.EMPLOYEE_DEPT = d.DEPT_CODE
WHERE d.DEPT_BUDGET > 50000;
Expected Result:
| First Name | Last Name |
|---|---|
| Michale | Robbin |
| Enric | Dosio |
| Joseph | Dosni |
| Zanifer | Emily |
| Kuleswar | Sitaraman |
| Henrey | Gabriel |
| Alex | Manuel |
| George | Mardy |
| Alan | Snappy |
| Maria | Foster |
24. Departments with More Than 2 Employees
Write a SQL query to display departments with more than 2 employees.
Query:
SELECT d.DEPT_NAME AS "Department Name", COUNT(e.EMPLOYEE_ID) AS "No of Employees"
FROM employee e INNER JOIN department d ON e.EMPLOYEE_DEPT = d.DEPT_CODE
GROUP BY d.DEPT_NAME
HAVING COUNT(e.EMPLOYEE_ID) > 2;
Expected Result:
| Department Name | No of Employees |
|---|---|
| IT | 5 |
| Finance | 3 |
| HR | 3 |
Subquery Examples
25. Orders by Paul Adam
Write a SQL query to display orders placed by the salesman named Paul Adam.
Query:
SELECT *
FROM orders
WHERE salesman_id = (
SELECT salesman_id
FROM salesman
WHERE name = 'Paul Adam'
);
Expected Result:
| order_no | purchase_amount | order_date | customer_id | salesman_id |
|---|---|---|---|---|
| 70011 | 75.29 | 2012-08-17 | 3003 | 5007 |
26. Orders from London Salesman
Write a SQL query to display orders placed by salesmen from London.
Query:
SELECT *
FROM orders
WHERE salesman_id = (
SELECT salesman_id
FROM salesman
WHERE city = 'London'
);
Expected Result:
| order_no | purchase_amount | order_date | customer_id | salesman_id |
|---|---|---|---|---|
| 70009 | 270.65 | 2012-09-10 | 3001 | 5005 |
27. Orders from New York Salesmen
Write a SQL query to display orders placed by salesmen from New York.
Query:
SELECT *
FROM orders
WHERE salesman_id IN (
SELECT salesman_id
FROM salesman
WHERE city = 'New York'
);
Expected Result:
| order_no | purchase_amount | order_date | customer_id | salesman_id |
|---|---|---|---|---|
| 70002 | 65.26 | 2012-10-05 | 3002 | 5001 |
| 70005 | 2400.60 | 2012-07-27 | 3007 | 5001 |
| 70008 | 5760.00 | 2012-09-10 | 3002 | 5001 |
| 70013 | 3045.60 | 2012-04-25 | 3002 | 5001 |
28. Commission of Salesmen Serving Paris Customers
Write a SQL query to display the commission of salesmen serving customers in Paris.
Query:
SELECT commission
FROM salesman
WHERE salesman_id IN (
SELECT salesman_id
FROM customer
WHERE city = 'Paris'
);
Expected Result:
| commission |
|---|
| 0.14 |
29. Count Customers with Grades Above New York Average
Write a SQL query to count customers with grades above the average grade of customers in New York.
Query:
SELECT COUNT(*) AS "Customer Count"
FROM customer
WHERE grade > (
SELECT AVG(grade)
FROM customer
WHERE city = 'New York'
);
Expected Result:
| Customer Count |
|---|
| 3 |
30. Customers with Orders on 2012-10-05
Write a SQL query to display customers who placed orders on October 5, 2012.
Query:
SELECT *
FROM customer
WHERE customer_id IN (
SELECT customer_id
FROM orders
WHERE order_date = '2012-10-05'
);
Expected Result:
| customer_id | customer_name | city | grade | salesman_id |
|---|---|---|---|---|
| 3002 | Nick Rimando | New York | 100 | 5001 |
| 3005 | Graham Zusi | California | 200 | 5002 |
Advanced Subqueries with ANY/ALL
31. Customers with Grade > ANY Customer in Cities < 'New York'
Write a SQL query to display customers whose grade is higher than at least one customer from cities alphabetically before New York.
Query:
SELECT *
FROM customer
WHERE grade > ANY (
SELECT grade
FROM customer
WHERE city < 'New York'
);
Expected Result:
| customer_id | customer_name | city | grade | salesman_id |
|---|---|---|---|---|
| 3002 | Nick Rimando | New York | 100 | 5001 |
| 3005 | Graham Zusi | California | 200 | 5002 |
| 3004 | Fabian Johns | Paris | 300 | 5006 |
| 3007 | Brad Davis | New York | 200 | 5001 |
| 3008 | Julian Green | London | 300 | 5002 |
| 3003 | Jozy Altidor | Moscow | 200 | 5007 |
32. Customers with Orders on 2012-08-17
Write a SQL query to display customers who placed orders on August 17, 2012.
Query (Subquery):
SELECT *
FROM customer
WHERE customer_id IN (
SELECT customer_id
FROM orders
WHERE order_date = '2012-08-17'
);
Query (Join):
SELECT c.customer_id, c.customer_name, c.city, c.grade, c.salesman_id
FROM customer c
INNER JOIN orders o ON c.customer_id = o.customer_id
WHERE o.order_date = '2012-08-17';
Expected Result:
| customer_id | customer_name | city | grade | salesman_id |
|---|---|---|---|---|
| 3009 | Geoff Camero | Berlin | 100 | 5003 |
| 3003 | Jozy Altidor | Moscow | 200 | 5007 |
33. Salesmen with More Than One Customer
Write a SQL query to find the name and numbers of salesmen who have more than one customer.
Query:
SELECT salesman_id AS "Salesman ID", name AS "Salesman Name"
FROM salesman
WHERE salesman_id IN (
SELECT salesman_id
FROM customer
GROUP BY salesman_id
HAVING COUNT(*) > 1
);
Expected Result:
| Salesman ID | Salesman Name |
|---|---|
| 5001 | James Hoog |
| 5002 | Nail Knite |
34. Customers if London Customers Exist
Write a SQL query to extract data from the customer table if one or more customers are located in London.
Query (EXISTS):
SELECT *
FROM customer
WHERE EXISTS (
SELECT *
FROM customer
WHERE city = 'London'
);
Query (COUNT):
SELECT *
FROM customer
WHERE (
SELECT COUNT(*)
FROM customer
WHERE city = 'London'
) >= 1;
Expected Result:
| customer_id | customer_name | city | grade | salesman_id |
|---|---|---|---|---|
| 3002 | Nick Rimando | New York | 100 | 5001 |
| 3005 | Graham Zusi | California | 200 | 5002 |
| 3001 | Brad Guzan | London | NULL | 5005 |
| 3004 | Fabian Johns | Paris | 300 | 5006 |
| 3007 | Brad Davis | New York | 200 | 5001 |
| 3009 | Geoff Camero | Berlin | 100 | 5003 |
| 3008 | Julian Green | London | 300 | 5002 |
| 3003 | Jozy Altidor | Moscow | 200 | 5007 |
35. Salesmen with Multiple Customers
Write a SQL query to find salesmen who have multiple customers.
Query:
SELECT *
FROM salesman
WHERE salesman_id IN (
SELECT salesman_id
FROM customer
GROUP BY salesman_id
HAVING COUNT(*) > 1
);
Expected Result:
| salesman_id | name | city | commission |
|---|---|---|---|
| 5001 | James Hoog | New York | 0.15 |
| 5002 | Nail Knite | Paris | 0.13 |
36. Salesmen with Only One Customer
Write a SQL query to find salesmen who work for only one customer.
Query:
SELECT *
FROM salesman
WHERE salesman_id IN (
SELECT salesman_id
FROM customer
GROUP BY salesman_id
HAVING COUNT(customer_id) = 1
);
Expected Result:
| salesman_id | name | city | commission |
|---|---|---|---|
| 5005 | Pit Alex | London | 0.11 |
| 5006 | Mc Lyon | Paris | 0.14 |
| 5003 | Lauson Hen | NULL | 0.12 |
| 5007 | Paul Adam | Rome | 0.13 |
37. Salesmen with Customers Having Multiple Orders
Write a SQL query to find salesmen whose customers have placed more than one order.
Query:
SELECT *
FROM salesman
WHERE salesman_id IN (
SELECT salesman_id
FROM customer
WHERE customer_id IN (
SELECT customer_id
FROM orders
GROUP BY customer_id
HAVING COUNT(*) > 1
)
);
Expected Result:
| salesman_id | name | city | commission |
|---|---|---|---|
| 5001 | James Hoog | New York | 0.15 |
| 5002 | Nail Knite | Paris | 0.13 |
| 5003 | Lauson Hen | NULL | 0.12 |
38. Salesmen in Same City as Customers
Write a SQL query to find salesmen who live in a city where any customer lives.
Query (IN):
SELECT *
FROM salesman
WHERE city IN (
SELECT city
FROM customer
);
Query (ANY):
SELECT *
FROM salesman
WHERE city = ANY (
SELECT city
FROM customer
);
Expected Result:
| salesman_id | name | city | commission |
|---|---|---|---|
| 5001 | James Hoog | New York | 0.15 |
| 5002 | Nail Knite | Paris | 0.13 |
| 5005 | Pit Alex | London | 0.11 |
| 5006 | Mc Lyon | Paris | 0.14 |
39. Salesmen with Customers in Same City
Write a SQL query to find salesmen who have customers in their city.
Query:
SELECT *
FROM salesman
WHERE city IN (
SELECT city
FROM customer
);
Expected Result:
| salesman_id | name | city | commission |
|---|---|---|---|
| 5001 | James Hoog | New York | 0.15 |
| 5002 | Nail Knite | Paris | 0.13 |
| 5005 | Pit Alex | London | 0.11 |
| 5006 | Mc Lyon | Paris | 0.14 |
40. Orders > ANY Amount on 2012-09-10
Write a SQL query to display orders with amounts greater than at least one order on September 10, 2012.
Query:
SELECT *
FROM orders
WHERE purchase_amount > ANY (
SELECT purchase_amount
FROM orders
WHERE order_date = '2012-09-10'
);
Expected Result:
| order_no | purchase_amount | order_date | customer_id | salesman_id |
|---|---|---|---|---|
| 70005 | 2400.60 | 2012-07-27 | 3007 | 5001 |
| 70008 | 5760.00 | 2012-09-10 | 3002 | 5001 |
| 70010 | 1983.43 | 2012-10-10 | 3004 | 5006 |
| 70003 | 2480.40 | 2012-10-10 | 3009 | 5003 |
| 70013 | 3045.60 | 2012-04-25 | 3002 | 5001 |
41. Orders < Any Amount for Customers in London
Write a SQL query to display orders with amounts smaller than any order amount for customers in London.
Query:
SELECT *
FROM orders
WHERE purchase_amount < ANY (
SELECT purchase_amount
FROM orders
WHERE customer_id IN (
SELECT customer_id
FROM customer
WHERE city = 'London'
)
);
Expected Result:
| order_no | purchase_amount | order_date | customer_id | salesman_id |
|---|---|---|---|---|
| 70002 | 65.26 | 2012-10-05 | 3002 | 5001 |
| 70004 | 110.50 | 2012-08-17 | 3009 | 5003 |
| 70001 | 150.50 | 2012-10-05 | 3005 | 5002 |
| 70012 | 250.45 | 2012-06-27 | 3008 | 5002 |
| 70011 | 75.29 | 2012-08-17 | 3003 | 5007 |
42. Orders < Maximum Amount for Customers in London
Write a SQL query to display orders with amounts smaller than the maximum order amount for customers in London.
Query:
SELECT *
FROM orders
WHERE purchase_amount < (
SELECT MAX(purchase_amount)
FROM orders
WHERE customer_id IN (
SELECT customer_id
FROM customer
WHERE city = 'London'
)
);
Expected Result:
| order_no | purchase_amount | order_date | customer_id | salesman_id |
|---|---|---|---|---|
| 70001 | 150.50 | 2012-10-05 | 3005 | 5002 |
| 70009 | 270.65 | 2012-09-10 | 3001 | 5005 |
| 70002 | 65.26 | 2012-10-05 | 3002 | 5001 |
| 70004 | 110.50 | 2012-08-17 | 3009 | 5003 |
| 70007 | 948.50 | 2012-09-10 | 3005 | 5002 |
| 70005 | 2400.60 | 2012-07-27 | 3007 | 5001 |
| 70008 | 5760.00 | 2012-09-10 | 3002 | 5001 |
| 70010 | 1983.43 | 2012-10-10 | 3004 | 5006 |
| 70003 | 2480.40 | 2012-10-10 | 3009 | 5003 |
| 70012 | 250.45 | 2012-06-27 | 3008 | 5002 |
| 70011 | 75.29 | 2012-08-17 | 3003 | 5007 |
| 70013 | 3045.60 | 2012-04-25 | 3002 | 5001 |
43. Customers with Grade Higher Than All New York Customers
Write a SQL query to display customers whose grade is higher than every customer in New York.
Query:
SELECT *
FROM customer
WHERE grade > ALL (
SELECT grade
FROM customer
WHERE city = 'New York'
);
Expected Result:
| customer_id | customer_name | city | grade | salesman_id |
|---|---|---|---|---|
| 3004 | Fabian Johns | Paris | 300 | 5006 |
| 3008 | Julian Green | London | 300 | 5002 |
44. Customers with Grade Different from London Customers
Write a SQL query to find customers whose grade is different from any grade of customers in London.
Query:
SELECT *
FROM customer
WHERE grade != ANY (
SELECT grade
FROM customer
WHERE city = 'London'
);
Expected Result:
| customer_id | customer_name | city | grade | salesman_id |
|---|---|---|---|---|
| 3002 | Nick Rimando | New York | 100 | 5001 |
| 3005 | Graham Zusi | California | 200 | 5002 |
| 3007 | Brad Davis | New York | 200 | 5001 |
| 3009 | Geoff Camero | Berlin | 100 | 5003 |
| 3003 | Jozy Altidor | Moscow | 200 | 5007 |
45. Customers with Grade Different from Paris Customers
Write a SQL query to find customers whose grade is different from any grade of customers in Paris.
Query (ANY):
SELECT *
FROM customer
WHERE grade != ANY (
SELECT grade
FROM customer
WHERE city = 'Paris'
);
Query (NOT IN):
SELECT *
FROM customer
WHERE grade NOT IN (
SELECT grade
FROM customer
WHERE city = 'Paris'
);
Expected Result:
| customer_id | customer_name | city | grade | salesman_id |
|---|---|---|---|---|
| 3002 | Nick Rimando | New York | 100 | 5001 |
| 3005 | Graham Zusi | California | 200 | 5002 |
| 3001 | Brad Guzan | London | NULL | 5005 |
| 3007 | Brad Davis | New York | 200 | 5001 |
| 3009 | Geoff Camero | Berlin | 100 | 5003 |
| 3003 | Jozy Altidor | Moscow | 200 | 5007 |
46. Customers with Grade Different from Dallas Customers
Write a SQL query to find customers whose grade is different from any grade of customers in Dallas.
Query:
SELECT *
FROM customer
WHERE grade NOT IN (
SELECT grade
FROM customer
WHERE city = 'Dallas'
);
Expected Result:
| customer_id | customer_name | city | grade | salesman_id |
|---|---|---|---|---|
| 3002 | Nick Rimando | New York | 100 | 5001 |
| 3005 | Graham Zusi | California | 200 | 5002 |
| 3001 | Brad Guzan | London | NULL | 5005 |
| 3004 | Fabian Johns | Paris | 300 | 5006 |
| 3007 | Brad Davis | New York | 200 | 5001 |
| 3009 | Geoff Camero | Berlin | 100 | 5003 |
| 3008 | Julian Green | London | 300 | 5002 |
| 3003 | Jozy Altidor | Moscow | 200 | 5007 |
47. Employees with Last Name Gabriel or Dosio
Write a SQL query to find employees whose last name is Gabriel or Dosio.
Query:
SELECT *
FROM employee
WHERE EMPLOYEE_LNAME IN ('Gabriel', 'Dosio');
Expected Result:
| EMPLOYEE_ID | EMPLOYEE_FNAME | EMPLOYEE_LNAME | EMPLOYEE_DEPT |
|---|---|---|---|
| 843795 | Enric | Dosio | 57 |
| 748681 | Henrey | Gabriel | 47 |
48. Employees in Departments 89 or 63
Write a SQL query to display employees who work in department 89 or 63.
Query:
SELECT *
FROM employee
WHERE EMPLOYEE_DEPT IN (89, 63);
Expected Result:
| EMPLOYEE_ID | EMPLOYEE_FNAME | EMPLOYEE_LNAME | EMPLOYEE_DEPT |
|---|---|---|---|
| 526689 | Carlos | Snares | 63 |
| 328717 | John | Snares | 63 |
| 733843 | Mario | Saule | 63 |
49. Departments with Budget Larger Than Average
Write a SQL query to find departments whose budget is larger than the average budget of all departments.
Query:
SELECT *
FROM department
WHERE DEPT_BUDGET > (
SELECT AVG(DEPT_BUDGET)
FROM department
);
Expected Result:
| DEPT_CODE | DEPT_NAME | DEPT_BUDGET |
|---|---|---|
| 47 | HR | 240000 |
| 89 | QC | 75000 |
50. Department with Second Lowest Budget
Write a SQL query to find the department with the second lowest budget.
Query:
SELECT DEPT_CODE, DEPT_NAME, DEPT_BUDGET
FROM department
WHERE DEPT_BUDGET = (
SELECT MIN(DEPT_BUDGET)
FROM department
WHERE DEPT_BUDGET > (
SELECT MIN(DEPT_BUDGET)
FROM department
)
);
Expected Result:
| DEPT_CODE | DEPT_NAME | DEPT_BUDGET |
|---|---|---|
| 27 | RD | 55000 |
51. Employees in Department with Second Lowest Budget
Write a SQL query to find the first and last names of employees working in the department with the second lowest budget.
Query:
SELECT EMPLOYEE_FNAME AS "First Name", EMPLOYEE_LNAME AS "Last Name"
FROM employee
WHERE EMPLOYEE_DEPT IN (
SELECT DEPT_CODE
FROM department
WHERE DEPT_BUDGET = (
SELECT MIN(DEPT_BUDGET)
FROM department
WHERE DEPT_BUDGET > (
SELECT MIN(DEPT_BUDGET)
FROM department
)
)
);
Expected Result:
| First Name | Last Name |
|---|---|
| George | Mardy |
| Alan | Snappy |